package cn.gudian.cms.sms;

import java.util.Iterator;
import java.util.List;

import cn.emay.sdk.client.api.MO;
import cn.emay.sdk.client.api.StatusReport;
import cn.emay.sdk.client.listener.ReceiveMessageListener;
import cn.emay.sdk.communication.socket.ResponseMsg;
import cn.gudian.cms.System.Sys;

/**
 * Created by IntelliJ IDEA.
 * User: Administrator
 * Date: 2010-5-16
 * Time: 18:56:32
 * To change this template use File | Settings | File Templates.
 */
public class SmsClient {
    public static String key = Sys.getValue("SMS_SOFTWARESERIALNO");//序列号首次激活时自己设定
    public static String password = Sys.getValue("SMS_PASSWORD");// 密码,请通过亿美销售人员获取
    public static int i = -100;

    public static void main(String[] args) {

    }

    public static String returnInfo(int number) {
        String returnStr = "";
        switch (number) {
            case 0:
                return "发送成功";
            case 305:
                return "服务器返回错误数据，服务器端返回的数据必须是能转换成数字的字符串";
            case 306:
                return "客户端缓存配置太小，无法数据保存到缓存中，请修改INITBUFFERSIZE缓存配置";
            case 307:
                return "发送短信目标号码不符合规则，手机号码必须是以0、1开头";
            case 308:
                return "非数字错误，修改密码时如果新密码不是数字那么会报308错误";
            case 10:
                return "客户端注册失败";
            case 11:
                return "企业信息注册失败";
            case 12:
                return "查询余额失败";
            case 13:
                return "充值失败";
            case 14:
                return "手机转移失败";
            case 15:
                return "手机扩展转移失败";
            case 16:
                return "取消转移失败";
            case 17:
                return "发送信息失败";
            case 18:
                return "发送定时信息失败";
            case 22:
                return "注销失败";
            case 27:
                return "查询单条短信费用错误码";
            case 999:
                return "操作频繁，有些接口是不允许多次调用的";
            case 998:
                return "由于客户端网络问题导致信息发送超，该信息是否成功无法确定";
            case 996:
                return "发送消息时短信序列号错误 即smsid错误";
            case 101:
                return "网络故障，无法连接到sdk服务器";
            case -100:
                return "操作出错，请稍后再操作";
            default:
                returnStr = "";
        }
        return returnStr;
    }

    /**
     * 软件序列号注册、或则说是激活、软件序列号首次使用必须激活
     * registEx(String serialpass)
     * 1、serialpass 软件序列号密码、密码长度为6位的数字字符串、软件序列号和密码请通过亿美销售人员获取
     */
    public static int registEx() {

        try {
            i = SDKClient.getClient().registEx(Sys.getValue("SMS_PASSWORD"));
            return i;
        } catch (Exception e) {
            e.printStackTrace();
            return i;
        }
    }

    /**
     * 软件注销
     * 1、软件注销后像发送短信、接受上行短信接口都无法使用
     * 2、软件可以重新注册、注册完成后软件序列号的金额保持注销前的状态
     */
    public static int loginOut() {

        try {
            i = SDKClient.getClient().logout();
            return i;
        } catch (Exception e) {
            e.printStackTrace();
            return i;
        }

    }


    /**
     * 发送短信、可以发送定时和即时短信
     * sendSMS(String[] mobiles,String smsContent, String addSerial, int smsPriority)
     * 1、mobiles 手机数组长度不能超过1000
     * 2、smsContent 最多500个汉字或1000个纯英文、请客户不要自行拆分短信内容以免造成混乱、亿美短信平台会根据实际通道自动拆分、计费以实际拆分条数为准、亿美推荐短信长度70字以内
     * 3、addSerial 附加码(长度小于15的字符串) 用户可通过附加码自定义短信类别,或添加自定义主叫号码( 联系亿美索取主叫号码列表)
     * 4、优先级范围1~5，数值越高优先级越高(相对于同一序列号)
     * 5、其它短信发送请参考使用手册自己尝试使用
     */
    public static int sendSMS(String[] mobiles, String smsContent, String addSerial, int smsPriority) {

        try {
            i = SDKClient.getClient().sendSMS(mobiles, smsContent, addSerial, smsPriority);//带扩展码
            return i;
        } catch (Exception e) {
            e.printStackTrace();
            return i;
        }

    }

    /**
     * 发送短信、可以发送定时和即时短信
     * sendSMS(String[] mobiles,String smsContent)
     * 1、mobiles 手机数组长度不能超过1000
     * 2、smsContent 最多500个汉字或1000个纯英文、请客户不要自行拆分短信内容以免造成混乱、亿美短信平台会根据实际通道自动拆分、计费以实际拆分条数为准、亿美推荐短信长度70字以内
     * 5、其它短信发送请参考使用手册自己尝试使用
     */
    public static int sendSMS(String[] mobiles, String smsContent) {

        try {
            i =SDKClient.getClient().sendSMS(mobiles, smsContent, "", 1);//带扩展码
            return i;
        } catch (Exception e) {
            e.printStackTrace();
            return i;
        }

    }

    /**
     * 发送定时短信
     * sendScheduledSMSEx(String[] mobiles, String smsContent,String sendTime,String srcCharset)
     * 1、mobiles 手机数组长度不能超过1000
     * 2、smsContent 最多500个汉字或1000个纯英文、请客户不要自行拆分短信内容以免造成混乱、亿美短信平台会根据实际通道自动拆分、计费以实际拆分条数为准、亿美推荐短信长度70字以内
     * 3、sendTime 定时短信发送时间 定时时间格式为：年年年年月月日日时时分分秒秒，例如20090801123030 表示2009年8月1日12点30分30秒该条短信会发送到用户手机
     * 4、srcCharset 字符编码，默认为"GBK"
     * 5、其它定时短信发送请参考使用手册自己尝试使用
     */
    public static int sendScheduledSMS(String[] mobiles, String smsContent, String sendTime, String srcCharset) {

        try {
            i = SDKClient.getClient().sendScheduledSMSEx(mobiles, smsContent, sendTime, srcCharset);
            return i;
        } catch (Exception e) {
            e.printStackTrace();
            return i;
        }

    }

    /**
     * 发送定时短信
     * sendScheduledSMSEx(String[] mobiles, String smsContent,String sendTime,String srcCharset)
     * 1、mobiles 手机数组长度不能超过1000
     * 2、smsContent 最多500个汉字或1000个纯英文、请客户不要自行拆分短信内容以免造成混乱、亿美短信平台会根据实际通道自动拆分、计费以实际拆分条数为准、亿美推荐短信长度70字以内
     * 3、sendTime 定时短信发送时间 定时时间格式为：年年年年月月日日时时分分秒秒，例如20090801123030 表示2009年8月1日12点30分30秒该条短信会发送到用户手机
     * 4、srcCharset 字符编码，默认为"GBK"
     * 5、其它定时短信发送请参考使用手册自己尝试使用
     */
    public static int sendScheduledSMS(String[] mobiles, String smsContent, String sendTime) {

        try {
            i = SDKClient.getClient().sendScheduledSMSEx(mobiles, smsContent, sendTime, "GBK");
            return i;
        } catch (Exception e) {
            e.printStackTrace();
            return i;
        }
    }

    /**
     * 软件序列号充值、如果软件序列号金额不足、那么可以调用该方法给序列号充值
     * chargeUp(String cardNo, String cardPass)
     * 1、cardNo 充值卡卡号
     * 2、cardPass 充值卡密码
     * 3、充值卡卡号和密码请联系亿美销售人员获得
     */
    public static int chargeUp(String cardNo, String cardPass) {

        try {
            i = SDKClient.getClient().chargeUp(cardNo, cardPass);
            return i;
        } catch (Exception e) {
            e.printStackTrace();
            return i;
        }
    }

    /**
     * 企业详细信息注册
     * registDetailInfo(String eName, String linkMan, String phoneNum,String mobile, String email, String fax, String address,String postcode)
     * 1、eName 企业名称(最多60字节)
     * 2、linkMan 联系人姓名(最多20字节)
     * 3、phoneNum 联系电话(最多20字节)
     * 4、mobile 联系手机(最多15字节)
     * 5、email 电子邮件(最多60字节)
     * 6、fax 联系传真(最多20字节)
     * 7、address 公司地址(最多60字节)
     * 8、postcode 邮政编码(最多6字节)
     * 9、以上参数信息都必须填写、每个参数都不能为空
     */
    public static int registDetailInfo(String eName, String linkMan, String phoneNum, String mobile, String email, String fax, String address, String postcode) {

        try {
            i = SDKClient.getClient().registDetailInfo(eName, linkMan, phoneNum, mobile, email, fax, address, postcode);
            return i;
        } catch (Exception e) {
            e.printStackTrace();
            return i;
        }
    }

    /**
     * 修改软件序列号密码、注意修改软件序列号密码以后不需要重新注册(激活)
     * serialPwdUpd(String serialPwd, String serialPwdNew)
     * 1、serialPwd 旧密码
     * 2、serialPwdNew 新密码、长度为6位的数字字符串
     */
    public static int serialPwdUpd(String serialPwd, String serialPwdNew) {

        try {
            i = SDKClient.getClient().serialPwdUpd(serialPwd, serialPwdNew);
            return i;
        } catch (Exception e) {
            e.printStackTrace();
            return i;
        }
    }

    //获取软件序列号的余额

    public static double getBalance() {
        double a = 0.0;
        try {
            a = SDKClient.getClient().getBalance();
            return a;
        } catch (Exception e) {
            e.printStackTrace();
            return a;
        }
    }
    //获取发送一条短信所需要的费用

    public static double getEachFee() {
        double a = 0.0;
        try {
            a = SDKClient.getClient().getEachFee();
            return a;
        } catch (Exception e) {
            e.printStackTrace();
            return a;
        }
    }

    /**
     * 1、从EUCP平台接收手机用户上行的短信
     * 2、返回值list中的每个元素为一个Mo对象
     * 4、Mo具体数据结构参考使用手册
     */
    public static List<MO> getMO() {
        List<MO> a = null;
        try {
            a = SDKClient.getClient().getMO();
            return a;

        } catch (Exception e) {
            e.printStackTrace();
            return a;
        }
    }

    /**
     * 注册转接功能是指当用户直接回复我们发送的短信时、EUCP平台会把用户的回复信息直接转发到我们注册转接的手机号上、
     * 最多可以注册10个手机号码或上行服务代码
     * setMOForward(String forwardMobile)
     * 1、forwardMobile 目标手机号码，有且只能有一个手机号码
     * 2、其中还有一个每次可以设置多个转接号码，自己可以结合使用手册尝试使用
     */
    public static int setMOForward(String forwardMobile) {
        try {
            i = SDKClient.getClient().setMOForward(forwardMobile);
            return i;
        } catch (Exception e) {
            e.printStackTrace();
            return i;
        }
    }
    //取消转发功能，即用户的上行短信不会再直接转发到我们注册转接功能所指定的手机号码中

    public static int cancelMOForward() {
        try {
            i = SDKClient.getClient().cancelMOForward();
            return i;
        } catch (Exception e) {
            e.printStackTrace();
            return i;
        }
    }
    //取得状态报告数据结构

    public static List<StatusReport> getReport() {
        List<StatusReport> list = null;
        try {
            list = SDKClient.getClient().getReport();
            return list;
        } catch (Exception e) {
            return list;
        }
    }


    /**
     * Description:关闭通道这个很重要，和关闭数据库连接一样，发送完短信请及时关闭通道
     *
     * @Version1.0 2009-11-4 上午11:45:36 by 凡红恩（fanhongen@emay.cn）创建
     */
    public static void closeChannel() {
        SDKClient.getClient().closeChannel();
    }


}
